Este apéndice proporciona un resumen de las características y convenciones de XML como referencia rápida.
Partes de un documento de XML
Un documento de XML consta de las siguientes partes, en el orden en que figuran:
Declaración de XML
La declaración de XML, si se incluye, debe ser la primera línea de un documento de XML. Indica la versión de XML a la que se adhiere el documento y si el archivo incluye referencias a otros archivos. Por ejemplo:
<?xml version="1.0" standalone="no"?>Declaración DOCTYPE (incluida la DTD)
La declaración DOCTYPE, la cual especifica la DTD del documento, debe aparecer después de la declaración de XML y antes de la etiqueta de comienzo del elemento raíz. Existen dos posibles partes de toda DTD: el subconjunto externo y el subconjunto interno. Si un documento tiene sólo un subconjunto externo, tendrá la siguiente estructura:
<?xml version="1.0" standalone="no">Si un documento tiene sólo un subconjunto interno, tendrá la siguiente estructura:
<?xml version="1.0" standalone="yes">Si un documento tiene tanto un subconjunto externo como otro interno, tendrá la siguiente estructura:
<?xml version="1.0" standalone="no">Elementos
Los elementos constan de una etiqueta de comienzo (<nombre_etiqueta>), algún contenido y una etiqueta de fin (</nombre_etiqueta>):
<nombre_etiqueta>El contenido va aquí.</nombre_etiqueta>Una excepción es la etiqueta vacía, que puede ser una etiqueta individual con una barra inclinida antes del símbolo de cierre >:
<etiqueta_vacía/>Todos los elementos deben estar anidados de forma correcta, lo que significa que la última etiqueta en abrirse debe cerrarse antes de que se cierre cualquiera de las demás etiquetas. Por ejemplo, la siguiente línea no sería válida en un documento de XML porque no se cierra <etiqueta2> antes de que se cierre <etiqueta1>:
<etiqueta1><etiqueta2>El contenido va aquí.</etiqueta1></etiqueta2>Cada documento de XML debe tener un elemento raíz que contenga todos los demás elementos en el documento.
Los nombres de elementos son sensibles a mayúsculas y minúsculas. El nombre de cada elemento debe comenzar con una letra o un subrayado (_); los caracteres siguientes en el nombre pueden ser letras, subrayados, números, guiones y puntos, pero no espacios ni tabulaciones.
Atributos
Los elementos pueden tener atributos como parte de sus etiquetas de comienzo (o, en el caso de elementos vacíos, como parte de la etiqueta de comienzo/fin individual). Un atributo consta de un nombre de atributo seguido del signo igual y un valor de atributo entre comillas. Por ejemplo:
<nombre_elemento nombre_atributo="valor_atributo">Contenido</nombre_elemento>Comentarios
Los comentarios constan de texto encerrado entre <!-- y -->. Los procesadores de XML no deben tener en cuenta el contenido de los comentarios. Los comentarios no pueden contener "--" ni otros comentarios.
<!-- Esto es un comentario. Se pueden utilizar aquí caracteres tales como < y >. -->Instrucciones de procesamiento
Las instrucciones de procesamiento constan de texto recogido entre <? y ?>. Sólo los procesadores de XML leen las instrucciones de procesamiento, las cuales no pueden incluir contenido. La sintaxis para las instrucciones de procesamiento es la siguiente:
<?instrucción deseada?>Referencias a caracteres
Las referencias a caracteres constituyen una manera de representar los caracteres Unicode en datos alfanuméricos analizados. La sintaxis para dichas referencias es la siguiente:
&#valor_Unicode_del_carácter;Referencias a entidades
Las referencias a entidades son nombres que representan un carácter, cadena de texto o archivo específico. Las referencias a entidades en un documento de XML aparecen siempre entre los signos & y ;. Por ejemplo, > representa el signo mayor que (<), el cual no se puede incluir en el contenido de XML, salvo como una referencia a entidad.
El significado de cada referencia a entidad que se utilice en un documento de XML debe definirse en la DTD del documento, con la excepción de las siguientes referencias a entidades predefinidas, las cuales se pueden utilizar sin definirse:
Carácter | Referencia a entidad |
< | < |
> | > |
& | & |
" | " |
' | ' |
XML bien formado
Para que un documento de XML esté bien formado, debe seguir estas reglas:
XML válido
Un documento de XML válido es uno que está bien formado y que se atiene a la DTD especificada por su declaración DOCTYPE.
Este apéndice proporciona un resumen de las características y convenciones de DTD como referencia rápida.
Partes de una definición DTD
Una DTD puede constar de las siguientes partes, en cualquier orden:
Declaraciones de tipo de elemento
La sintaxis para una definición de tipo de elemento es la siguiente:
<!ELEMENT nombre_elemento (contenido_elemento)>Los nombres de elementos son sensibles a mayúsculas y minúsculas. El nombre de cada elemento debe comenzar con una letra o un subrayado (_); los caracteres siguientes en el nombre pueden ser letras, subrayados, números, guiones y puntos, pero no espacios ni tabulaciones.
El contenido de los elementos puede constar de datos alfanuméricos analizados (es decir, texto y referencias a entidades expresados como ) y/u otros tipos de elementos. Los siguientes símbolos se pueden insertar después de cualquier nombre de elemento o cierre del paréntesis en la definición del contenido del elemento:
Símbolo | Significado |
Ninguno | Exactamente uno |
+ | Uno o más |
* | Cero o más |
? | Cero o uno |
Para obligar a que un elemento vaya seguido de otro, utilice una coma:
<!ELEMENT nombre_elemento (elemento1, elemento2)>Para indicar que el contenido puede incluir un elemento u otro, utilice |:
<!ELEMENT nombre_elemento (elemento1 | elemento2)>Para permitir que un elemento incluya una combinación de elementos específicos y #PCDATA en cualquier orden, utilice la siguiente sintaxis:
<!ELEMENT nombre_elemento (#PCDATA | elemento1 | elemento2)*>Para permitir que un elemento incluya cualquier combinación de elementos y #PCDATA en cualquier orden, utilice la siguiente sintaxis (observe que se omite el paréntesis):
<!ELEMENT nombre_elemento ANY>Para definir un elemento vacío, utilice la siguiente sintaxis (observe que se omite el paréntesis):
<!ELEMENT nombre_elemento EMPTY>Declaraciones de atributo
La sintaxis para una definición de atributo es la siguiente:
<!ATTLIST nombre_elemento nombre_atributo tipo_atributo valor_por_omisión>Los nombres de atributos son sensibles a mayúsculas y minúsculas. El nombre de cada atributo debe comenzar con una letra o un subrayado (_); los caracteres siguientes en el nombre pueden ser letras, subrayados, números, guiones y puntos, pero no espacios ni tabulaciones.
A continuación se indican los tipos de atributos válidos:
Tipo de atributo | Significado |
CDATA | Datos alfanuméricos y referencias a entidades, entre comillas ("") |
ID | Debe contener un nombre* exclusivo para cada elemento de este tipo |
IDREF | El nombre* de ID (identificación) exclusivo de un elemento en el archivo de XML |
ENTITY | El nombre* de una referencia a entidad externa sin analizar definida en la DTD |
ENTITIES | Una lista de nombres de ENTITY, separados por espacios |
Enumerado | Una lista entre paréntesis de nombres*, separados por los caracteres | |
NMTOKEN | Un valor que contiene sólo caracteres nombre_caracteres** |
NMTOKENS | Una lista de atributos NMTOKEN, separados por espacios |
NOTATION | El nombre de una anotación definida en la DTD |
NOTATION enumerado | Una lista entre paréntesis de atributos NOTATION, separados por los caracteres | |
*Los nombres deben comenzar con una letra o un subrayado (_); los caracteres siguientes en el nombre puede ser letras, subrayados, números, guiones y puntos, pero no espacios ni tabulaciones.
**Los caracteres nombre_caracteres incluyen letras, subrayados, números, guiones o puntos, pero no espacios ni tabulaciones.
A continuación se indican los valores de atributo por omisión válidos:
Tipo de atributo | Significado |
#REQUIRED | Este atributo debe ser especificado por el elemento |
#IMPLIED | Este atributo puede o no utilizarse |
#FIXED valor | Si no se especifica, se presupone que este atributo es valor; si se especifica, debe ser valor |
valor_por_omisión | Si no se especifica, se presupone que este atributo es valor_por_omisión |
Comentarios
Los comentarios constan de texto encerrado entre <!-- y -->. Los procesadores de XML no deben tener en cuenta el contenido de los comentarios. Los comentarios no pueden contener "--" ni otros comentarios.
<!-- Esto es un comentario. Se pueden utilizar aquí caracteres tales como < y >. -->Referencias a caracteres
Las referencias a caracteres constituyen una manera de representar los caracteres Unicode en datos alfanuméricos analizados. La sintaxis para dichas referencias es la siguiente:
&#valor_Unicode_del_carácter;Declaraciones de referencia a entidades
Existen cinco tipos de entidades. La sintaxis para su declaración es la siguiente:
Tipo de entidad | Síntaxis |
Interna analizada | <!ENTITY nombre_entidad "texto de la entidad"> |
Externa analizada | <!ENTITY nombre_entidad SYSTEM "URL del archivo"> O BIEN <!ENTITY nombre_entidad PUBLIC "nombre del archivo" "URL del archivo"> |
Externa sin analizar | <!ENTITY nombre_entidad SYSTEM "URL del archivo" NDATA nombre_anotación> O BIEN <!ENTITY nombre_entidad PUBLIC "nombre del archivo" "URL del archivo" NDATA nombre_anotación> |
Parámetro interno | <!ENTITY % nombre_entidad "texto de la entidad"> |
Parámetro externo | <!ENTITY % nombre_entidad SYSTEM "URL del archivo"> O BIEN <!ENTITY % nombre_entidad PUBLIC "nombre del archivo" "URL del archivo"> |
La sintaxis para utilizar los tres primeros tipos de referencia a entidades es &nombre_entidad;. La sintaxis para utilizar una entidad de parámetro es %nombre_entidad;. Las referencias a entidades de parámetro siempre son analizadas y sólo se pueden utilizar en una DTD.
Declaraciones da anotación
Las declaraciones de anotación deben especificarse de una de las dos maneras siguientes:
<!NOTATION nombre_anotación SYSTEM "Identificador externo">El identificador externo debería ser el nombre de una aplicación que pueda procesar o mostrar archivos a los que se aplique la anotación. Por ejemplo:
<!NOTATION gif SYSTEM "Microsoft Internet Explorer">Tenga en cuenta que la aplicación que procesa el XML debe encargarse de pasar el URL a la aplicación indicada por el identificador externo.
Instrucciones de procesamiento
Las instrucciones de procesamiento constan de texto recogido entre <? y ?>. Sólo los procesadores de XML leen las instrucciones de procesamiento, las cuales no pueden incluir contenido. La sintaxis para las instrucciones de procesamiento es la siguiente:
<?instrucción deseada?>Supongamos que acaba de exportar un archivo de XML desde avenue.quark y al examinarlo en el editor de texto, observa una "a" minúscula acentuada en todos los lugares donde pensaba que había un símbolo de marca comercial (TM). De hecho, muchos de los símbolos se ven raros. ¿Qué ha ocurrido?
Es muy probable que su editor de texto no sea compatible con el tipo de codificación utilizado por el archivo de XML. En este apéndice se explica detalladamente el tema.
¿Qué es la codificación?
La codificación es una especificación que correlaciona un conjunto de caracteres con valores numéricos correspondientes. Por ejemplo, el tipo de codificación ASCII correlaciona el carácter "M" con el valor numérico 77, "N" con el 78, "O" con el 79, y así sucesivamente.
La codificación de un archivo de texto permite que un programa convierta el archivo de texto en los caracteres adecuados en la pantalla. Sin la codificación, un archivo de texto sería un flujo de números. Si intenta visualizar en pantalla un archivo de texto utilizando una codificación incorrecta, es probable que vea basura porque la aplicación que abre el archivo correlacionará los valores numéricos con un conjunto de caracteres equivocado.
Lo siguiente son tipos de codificación:
Avenue.quark es compatible con los tipos de codificación UTF-8, UTF-16 y Shift-JIS.
Rangos de caracteres superior e inferior
La mayoría de los tipos de codificación se puede dividir en dos partes: los primeros 128 caracteres (el rango inferior) y todos los caracteres a partir de allí (el rango superior).
En términos generales, el rango inferior de la mayoría de los tipos de codificación se correlaciona con los mismos caracteres. Este rango incluye los caracteres a-z, A-Z, 0-9, unos cuantos caracteres de puntuación y algunos caracteres de control especiales.
En el rango superior es donde surgen problemas. Por ejemplo, MacRoman y Windows Latin 1 tienen rangos inferiores que son más o menos idénticos. Por tanto, si toma un archivo que utiliza sólo caracteres de este rango y lo transfiere de Mac OS a Windows, se ve bien. Sin embargo, si el archivo contiene caracteres del rango superior, podría obtener resultados raros porque muchos de los valores del rango superior se correlacionan con caracteres diferentes en cada plataforma. Por ejemplo, un carácter que aparece como el símbolo de marca comercial en Mac OS podría aparecer como una "a" minúscula superíndice en Windows.
Cuando se presentan caracteres incorrectamente de esta forma se debe a que la aplicación que muestra el texto no conoce la codificación del mismo o a que la aplicación no puede mostrar correctamente el texto con la codificación especificada del archivo.
Especificación de tipos de codificación
La codificación de un archivo de XML se puede indicar incluyendo una especificación de codificación en la declaración de XML del archivo; por ejemplo:
<?xml version="1.0" standalone="yes" encoding="Shift_JIS"?>Si un archivo de XML no contiene una especificación de codificación, avenue.quark parte de la suposición de que el archivo utiliza la codifica-ción UTF-8.
Cuando se guarda un archivo de XML en avenue.quark, se especifica la codificación del documento mediante el menú emergente Codificación, y avenue.quark genera automáticamente el atributo de codificación adecuado.
Codificación y definiciones DTD
XML permite especificar la codificación de un archivo de XML. Sin embargo, no ofrece una manera de determinar la codificación del archivo de una DTD independiente.
Afortunadamente, avenue.quark sí lo hace. Para especificar la codificación de una DTD independiente, tan sólo se tiene que añadir el siguiente texto a la primera línea en el archivo:
<? xml encoding="encodingName" ?>Por ejemplo, para especificar una DTD independiente como una DTD UTF-16, basta con que añada la siguiente línea al comienzo del archivo:
<? xml encoding="UTF-16" ?>